/*--------------------------为mylock表加S锁（读锁）------------------------------------*/
LOCK TABLE mylock READ;
UNLOCK TABLES;


/*--------------------------为mylock表加S锁（写锁）------------------------------------*/
LOCK TABLE mylock WRITE;
UNLOCK TABLES;


/*-------------会话1中加入了行级S锁，可以在会话2中加入表级S锁----------------*/
LOCK TABLES actor READ;
UNLOCK TABLES;


/*--------------------------在会话1当中加上行级X锁后，再在会话2中尝试加上表级X锁------------------------------------*/
LOCK TABLES actor WRITE;
UNLOCK TABLES;	


/*--------------------------在mylock表被加上表级共享锁S，可读；加上排他锁X，不可读------------------------------------*/
BEGIN;
SELECT * FROM mylock;
COMMIT;


/*-----------因为会话1中的事务获取了行级排他锁X，会话2中的update事务会被阻塞------------*/
BEGIN;
UPDATE actor SET first_name = 'session222' WHERE actor_id = 6;
COMMIT;


/*-----------------------------会话1中加入了行级共享锁S，在会话2中也可以进行S锁加锁---------------------------------*/
BEGIN;
SELECT first_name FROM actor WHERE actor_id = 6 LOCK IN SHARE MODE;
COMMIT;	/*提交事务，结束事务*/


/*-----------------------------会话1中对特定记录加入了行级排他锁X，会话2中可对 不同的记录 加入X锁
			       行级排他锁X和排他意向锁之间不互斥-----------------------------------------------------------*/
BEGIN;
SELECT first_name FROM actor WHERE actor_id = 2 FOR UPDATE;  /*悲观锁*/
COMMIT;


/*------------------------------会话1中对特定记录加入了行级排他锁X，会话2中不可对 相同的记录 加入X锁-------------------*/
BEGIN;
SELECT first_name FROM actor WHERE actor_id = 6 FOR UPDATE;  /*悲观锁*/
COMMIT;


/*-----------------------------会话1中加入了行级共享锁S，在会话2中针对同一记录，不可进行update操作---------------------------------*/
BEGIN;
UPDATE actor SET first_name = "Bette_session2" WHERE actor_id = 6;
COMMIT;
